package com.king.modules.system.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.king.framework.base.domain.vo.AjaxResult;
import com.king.framework.base.domain.vo.LoginUser;
import com.king.framework.base.service.YyTreeService;
import com.king.modules.system.domain.SysGroupMenuEntity;
import com.king.modules.system.domain.SysMenuEntity;

/**
 * 菜单 业务层
 * 
 * @author king
 */
public interface SysMenuService extends YyTreeService<SysMenuEntity,Long>{
	/**
	 * 根据用户查询系统菜单列表
	 * 
	 * @param userId
	 *            用户ID
	 * @return 菜单列表
	 */
	public List<SysMenuEntity> selectGroupMenuList(LoginUser user);

	/**
	 * 根据用户查询系统菜单列表
	 * 
	 * @param menu
	 *            菜单信息
	 * @param userId
	 *            用户ID
	 * @return 菜单列表
	 */
	public List<SysMenuEntity> selectMenuList(SysMenuEntity menu, Long userId);

	/**
	 * 根据用户ID查询权限
	 * 
	 * @param userId
	 *            用户ID
	 * @return 权限列表
	 */
	public Set<String> selectMenuPermsByUserId(Long userId);


	/**
	 * 根据角色ID查询菜单树信息
	 * 
	 * @param roleId
	 *            角色ID
	 * @return 选中菜单列表
	 */
	public List<Long> selectMenuIdsByRoleId(Long roleId);
	
	
	/**
	 * 根据用户ID查询菜单树信息
	 * 
	 * @param userId
	 *            用户ID
	 * @return 菜单列表
	 */
	public AjaxResult selectRouteResByUserId(Long userId);

	/**
	 * 查询菜单是否存在角色
	 * 
	 * @param menuId
	 *            菜单ID
	 * @return 结果 true 存在 false 不存在
	 */
	public boolean checkMenuExistRole(Long menuId);



	/**
	 * 查询当前集团的菜单
	 * @param form
	 * @return
	 */
	public List<SysGroupMenuEntity> queryOwnMenuRes(SysMenuEntity form);

	/**
	 * 复制菜单
	 * @param id
	 * @return
	 * @throws Exception 
	 */
	public AjaxResult copy(Long id) throws Exception;

	/**
	 * 查询菜单下的按钮列表
	 * @param searchMap
	 * @return
	 * @throws Exception 
	 */
	public AjaxResult queryMenuRes(Map<String, Object> searchMap) throws Exception;

	/**
	 * 设置按钮的信息
	 * @param menu
	 * @param entity
	 */
	public void setBtnInfoByParent(SysMenuEntity menu, SysMenuEntity entity);
}
